package com.chenfan.mcn.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.chenfan.mcn.dao.StarRateCardMapper;
import com.chenfan.mcn.extension.excel.DynamicExcel;
import com.chenfan.common.extension.mybatisplus.enhanced.EnhancedService;
import com.chenfan.mcn.model.StarRateCard;
import com.chenfan.mcn.model.dto.*;
import com.chenfan.mcn.model.vo.*;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 红人刊例管理服务接口
 * @author wulg
 * @date 2021-12-30
 **/
public interface StarRateCardService extends EnhancedService<StarRateCardMapper, StarRateCard> {

    /**
     * 保存红人刊例
     * @param dto
     * @return
     */
    Long saveStarRateCard(StarRateCardSaveDTO dto);

    /**
     * 保存/保存并填报-红人刊例明细
     * @param dto
     * @return
     */
    boolean saveAndFillInDetail(StarRateCardDetailFillInDTO dto);

    /**
     * 保存/保存并确认-红人刊例明细
     * @param dto
     * @return
     */
    boolean saveAndConfirmDetail(StarRateCardDetailSaveDTO dto);

    /**
     * 分页查询红人刊例明细
     * @param starRateCard
     * @param queryDTO
     * @return
     */
    StarRateCardDetailQueryVO queryDetails(StarRateCard starRateCard, StarRateCardDetailQueryDTO queryDTO);

    /**
     * 红人刊例分页查询
     * @param searchDTO
     * @return
     */
    Page<StarRateCardListVO> queryByPage(StarRateCardSearchDTO searchDTO);


    /**
     * 红人刊例详情
     * @param id
     * @return
     */
    StarRateCardInfoVO detail(Long id);

    /**
     * 红人刊例管理-修改单据状态
     *
     * @param id {@link Long}
     * @param approvalStatus   {@link Integer}
     * @return {@link Boolean}
     */
    boolean changeStatus(Long id, Integer approvalStatus);


    /**
     * 确认更新
     * @param dto
     * @return
     */
    boolean confirmUpdate(StarRateCardConfirmUpdateDTO dto);

    /**
     * 复制历史刊例
     * @param id
     * @return
     */
    boolean copyHistory(Long id);

    /**
     * （批量）删除明细
     * @param dto
     * @return
     */
    boolean deleteDetails(StarRateCardDetailDeleteDTO dto);


    /**
     * 获取刊例关联的平台Tab栏信息
     * @param id
     * @return
     */
    List<StarRateCardPlatformTabVO> getPlatformTab(Long id);

    /**
     * 通过刊例ID获取所有红人ID集合
     * @param cardId
     * @return
     */
    List<Long> getAllStarId(Long cardId);

    /**
     * 根据刊例ID获取刊例信息
     * @param id
     * @param verifyExist
     * @return
     */
    StarRateCard getStarRateCard(Long id, boolean verifyExist);

    /**
     * 获取动态excelList
     * @param starRateCard
     * @return
     */
    List<DynamicExcel> getDynamicExcelList(StarRateCard starRateCard);


    /**
     * 分页查询红人平台
     * @param queryDTO
     * @return
     */
    Page<RateCardStarPlatformVO> getStarPlatformList(RateCardStarPlatformQueryDTO queryDTO);

    /**
     * 添加红人平台
     * @param dto
     * @return
     */
    boolean addStarPlatform(StarRateCardDetailAddPlatformDTO dto);

    /**
     * 催办经纪人
     * @param dto
     * @return
     */
    boolean remindAgent(StarRateCardRemindDTO dto);

    /**
     * 获取最新的刊例报价
     * @param dto
     * @return
     */
    BigDecimal getRateCardPrice(RateCardPriceQueryDTO dto);

    /**
     * 导入刊例
     * @param starRateCard
     * @param sheetHeaderMap
     * @param sheetBodyMap
     * @return
     */
    String importExcelById(StarRateCard starRateCard, Map<String, Map<Integer, String>> sheetHeaderMap, Map<String, List<Map<Integer, String>>> sheetBodyMap);
}
